extends Node




var 玩家角色集合: Array[角色单位] = []
var 敌人角色集合: Array[角色单位] = []

var 选中的角色: 角色单位
signal 信号_变更选中的角色(unit: 角色单位)
signal 信号_玩家获胜
signal 信号_玩家失败

var 是否游戏结束:bool = false

func 退出游戏():
	玩家角色集合.clear()
	敌人角色集合.clear()
	
	回合管理器.初始化()
	敌人行动管理器.初始化()
	玩家行动管理器.初始化()
	网格管理器.初始化()
	get_tree().change_scene_to_file("res://场景/角色选择场景.tscn")
	

func 生成角色(角色信息: 角色资源类, 网格坐标: Vector2i, 队伍id: String):
	var 角色:角色单位 = 角色信息.场景.instantiate()
	get_tree().current_scene.add_child(角色)
	角色.队伍id = 队伍id
	角色.global_position = 网格管理器.获取世界坐标(网格坐标)
	
	添加角色(角色)
	

func 添加角色(unit: 角色单位):
	if unit.队伍id == "玩家":
		玩家角色集合.append(unit)
	else:
		敌人角色集合.append(unit)	
	
	unit.信号_死亡.connect(当角色死亡)
		

func 注销角色(unit: 角色单位):
	if unit.队伍id == "玩家":
		玩家角色集合.erase(unit)
	else:
		敌人角色集合.erase(unit)	
		
		
func 选中角色(unit: 角色单位):
	if 玩家行动管理器.是否行动中:
		return
	
	if 	unit.队伍id != "玩家":
		return
		
	选中的角色 = unit
	print("选中角色="+ 选中的角色.名称)
	信号_变更选中的角色.emit(选中的角色)
	
func 当角色死亡(角色):
	网格管理器.设置网格占用角色(角色.当前网格坐标, null)	
	网格管理器.设置网格可行走(角色.当前网格坐标, true)
	注销角色(角色)
	if 玩家角色集合.is_empty() or 敌人角色集合.is_empty():
		游戏结束()


func 游戏结束():
	是否游戏结束 = true
	if 玩家角色集合.is_empty():
		print("游戏结束 玩家失败!")
		信号_玩家失败.emit()
	elif 敌人角色集合.is_empty():
		print("游戏结束 玩家获胜!")	
		信号_玩家获胜.emit()
	
	
